<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>JSDoc: Class: NodeApiServer</title>

    <script src="scripts/prettify/prettify.js"> </script>
    <script src="scripts/prettify/lang-css.js"> </script>
    <!--[if lt IE 9]>
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>

<body>

<div id="main">

    <h1 class="page-title">Class: NodeApiServer</h1>

    




<section>

<header>
    
        <h2>NodeApiServer</h2>
        
    
</header>

<article>
    <div class="container-overview">
    
        

    

    <h4 class="name" id="NodeApiServer"><span class="type-signature"></span>new NodeApiServer<span class="signature">()</span><span class="type-signature"></span></h4>

    



<div class="description">
    The NodeApiServer class.
</div>













<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line34">line 34</a>
    </li></ul></dd>
    

    

    

    
</dl>
















    
    </div>

    

    

    

     

    

    
            <h3 class="subsection-title">Methods</h3>

            <ul><li><a href="#access"><span class="type-signature">(static) </span>access<span class="signature">(dbName, objType, objName, methodName, checkFunction)</span><span class="type-signature"> &rarr; {*}</span></a></li><li><a href="#express"><span class="type-signature"></span>express<span class="signature">()</span><span class="type-signature"> &rarr; {*|exports|module.exports}</span></a></li><li><a href="#handleRequest"><span class="type-signature"></span>handleRequest<span class="signature">(req, res)</span><span class="type-signature"></span></a></li><li><a href="#handleSyncRequest"><span class="type-signature"></span>handleSyncRequest<span class="signature">(req, res)</span><span class="type-signature"></span></a></li><li><a href="#hasPermission"><span class="type-signature"></span>hasPermission<span class="signature">(dbName, objType, objName, methodName, req, callback)</span><span class="type-signature"> &rarr; {*}</span></a></li><li><a href="#init"><span class="type-signature"></span>init<span class="signature">(core)</span><span class="type-signature"></span></a></li><li><a href="#sendToAll"><span class="type-signature"></span>sendToAll<span class="signature">(io, eventName, data)</span><span class="type-signature"></span></a></li><li><a href="#sendToClient"><span class="type-signature"></span>sendToClient<span class="signature">(res, messageId, eventName, stringifiedData)</span><span class="type-signature"></span></a></li><li><a href="#serverApp"><span class="type-signature"></span>serverApp<span class="signature">()</span><span class="type-signature"> &rarr; {*}</span></a></li><li><a href="#start"><span class="type-signature"></span>start<span class="signature">(host, port, options, callback<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {<a href="NodeApiServer.html">NodeApiServer</a>}</span></a></li><li><a href="#stop"><span class="type-signature"></span>stop<span class="signature">()</span><span class="type-signature"></span></a></li></ul>

            
                

    

    <h4 class="name" id=".access"><span class="type-signature">(static) </span>access<span class="signature">(dbName, objType, objName, methodName, checkFunction)</span><span class="type-signature"> &rarr; {*}</span></h4>

    



<div class="description">
    Defines an access rule for an object and HTTP method combination. When
access is requested via a REST call, the function provided will be
executed and the callback from that method will determine if the
access will be allowed or denied. Multiple access functions can
be provided for a single model and method allowing authentication
checks to be stacked.

This call also allows you to pass a wildcard "*" instead of the objType,
objName and methodName parameters which will match all items. This
allows you to set permissions globally.

If no access permissions are present ForerunnerDB will automatically
deny any request to the resource by default.
</div>









    <h5>Parameters:</h5>
    

<table class="params">
    <thead>
    <tr>
        
        <th>Name</th>
        

        <th>Type</th>

        

        

        <th class="last">Description</th>
    </tr>
    </thead>

    <tbody>
    

        <tr>
            
                <td class="name"><code>dbName</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last">The name of the database to set access rules for.</td>
        </tr>

    

        <tr>
            
                <td class="name"><code>objType</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last">The type of object that the name refers to
e.g. "collection", "view" etc. This effectively maps to a method name on
the Db class instance. If you can do db.collection() then you can use the
string "collection" since it maps to the db.collection() method. This means
you can also use this to map to custom classes as long as you register
an accessor method on the Db class.</td>
        </tr>

    

        <tr>
            
                <td class="name"><code>objName</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last">The object name to apply the access rule to.</td>
        </tr>

    

        <tr>
            
                <td class="name"><code>methodName</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last">The name of the HTTP method to apply the access
function to e.g. "GET", "POST", "PUT", "PATCH" etc.</td>
        </tr>

    

        <tr>
            
                <td class="name"><code>checkFunction</code></td>
            

            <td class="type">
            
                
<span class="param-type">function</span>
|

<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last">The function to call when an access
attempt is made against the collection. A callback method is passed to this
function which should be called after the function has finished
processing. If you do not need custom logic to allow or deny access you
can simply pass the string "allow" or "deny" instead of a function and
ForerunnerDB will handle the logic automatically.</td>
        </tr>

    
    </tbody>
</table>






<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line742">line 742</a>
    </li></ul></dd>
    

    

    

    
</dl>













<h5>Returns:</h5>

        


<dl>
    <dt>
        Type
    </dt>
    <dd>
        
<span class="param-type">*</span>


    </dd>
</dl>

    



            
                

    

    <h4 class="name" id="express"><span class="type-signature"></span>express<span class="signature">()</span><span class="type-signature"> &rarr; {*|exports|module.exports}</span></h4>

    



<div class="description">
    Gets the express library.
</div>













<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line194">line 194</a>
    </li></ul></dd>
    

    

    

    
</dl>













<h5>Returns:</h5>

        


<dl>
    <dt>
        Type
    </dt>
    <dd>
        
<span class="param-type">*</span>
|

<span class="param-type">exports</span>
|

<span class="param-type">module.exports</span>


    </dd>
</dl>

    



            
                

    

    <h4 class="name" id="handleRequest"><span class="type-signature"></span>handleRequest<span class="signature">(req, res)</span><span class="type-signature"></span></h4>

    



<div class="description">
    Handles requests from clients to the endpoints the database exposes.
</div>









    <h5>Parameters:</h5>
    

<table class="params">
    <thead>
    <tr>
        
        <th>Name</th>
        

        <th>Type</th>

        

        

        <th class="last">Description</th>
    </tr>
    </thead>

    <tbody>
    

        <tr>
            
                <td class="name"><code>req</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>res</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    
    </tbody>
</table>






<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line316">line 316</a>
    </li></ul></dd>
    

    

    

    
</dl>
















            
                

    

    <h4 class="name" id="handleSyncRequest"><span class="type-signature"></span>handleSyncRequest<span class="signature">(req, res)</span><span class="type-signature"></span></h4>

    



<div class="description">
    Handles client requests to open an EventSource connection to our
server-sent events server.
</div>









    <h5>Parameters:</h5>
    

<table class="params">
    <thead>
    <tr>
        
        <th>Name</th>
        

        <th>Type</th>

        

        

        <th class="last">Description</th>
    </tr>
    </thead>

    <tbody>
    

        <tr>
            
                <td class="name"><code>req</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>res</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    
    </tbody>
</table>






<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line595">line 595</a>
    </li></ul></dd>
    

    

    

    
</dl>
















            
                

    

    <h4 class="name" id="hasPermission"><span class="type-signature"></span>hasPermission<span class="signature">(dbName, objType, objName, methodName, req, callback)</span><span class="type-signature"> &rarr; {*}</span></h4>

    



<div class="description">
    Checks for permission to access the specified object.
</div>









    <h5>Parameters:</h5>
    

<table class="params">
    <thead>
    <tr>
        
        <th>Name</th>
        

        <th>Type</th>

        

        

        <th class="last">Description</th>
    </tr>
    </thead>

    <tbody>
    

        <tr>
            
                <td class="name"><code>dbName</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>objType</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>objName</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>methodName</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>req</code></td>
            

            <td class="type">
            
                
<span class="param-type">Object</span>


            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>callback</code></td>
            

            <td class="type">
            
                
<span class="param-type">function</span>


            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    
    </tbody>
</table>






<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line722">line 722</a>
    </li></ul></dd>
    

    

    

    
</dl>













<h5>Returns:</h5>

        


<dl>
    <dt>
        Type
    </dt>
    <dd>
        
<span class="param-type">*</span>


    </dd>
</dl>

    



            
                

    

    <h4 class="name" id="init"><span class="type-signature"></span>init<span class="signature">(core)</span><span class="type-signature"></span></h4>

    



<div class="description">
    The init method that can be overridden or extended.
</div>









    <h5>Parameters:</h5>
    

<table class="params">
    <thead>
    <tr>
        
        <th>Name</th>
        

        <th>Type</th>

        

        

        <th class="last">Description</th>
    </tr>
    </thead>

    <tbody>
    

        <tr>
            
                <td class="name"><code>core</code></td>
            

            <td class="type">
            
                
<span class="param-type"><a href="Core.html">Core</a></span>


            
            </td>

            

            

            <td class="description last">The ForerunnerDB core instance.</td>
        </tr>

    
    </tbody>
</table>






<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line42">line 42</a>
    </li></ul></dd>
    

    

    

    
</dl>
















            
                

    

    <h4 class="name" id="sendToAll"><span class="type-signature"></span>sendToAll<span class="signature">(io, eventName, data)</span><span class="type-signature"></span></h4>

    



<div class="description">
    Sends server-sent-events message to all connected clients that are listening
to the changes in the IO that is passed.
</div>









    <h5>Parameters:</h5>
    

<table class="params">
    <thead>
    <tr>
        
        <th>Name</th>
        

        <th>Type</th>

        

        

        <th class="last">Description</th>
    </tr>
    </thead>

    <tbody>
    

        <tr>
            
                <td class="name"><code>io</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>eventName</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>data</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    
    </tbody>
</table>






<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line677">line 677</a>
    </li></ul></dd>
    

    

    

    
</dl>
















            
                

    

    <h4 class="name" id="sendToClient"><span class="type-signature"></span>sendToClient<span class="signature">(res, messageId, eventName, stringifiedData)</span><span class="type-signature"></span></h4>

    



<div class="description">
    Sends data to individual client.
</div>









    <h5>Parameters:</h5>
    

<table class="params">
    <thead>
    <tr>
        
        <th>Name</th>
        

        <th>Type</th>

        

        

        <th class="last">Description</th>
    </tr>
    </thead>

    <tbody>
    

        <tr>
            
                <td class="name"><code>res</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>messageId</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>eventName</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last"></td>
        </tr>

    

        <tr>
            
                <td class="name"><code>stringifiedData</code></td>
            

            <td class="type">
            
            </td>

            

            

            <td class="description last">Data to send in already-stringified format.</td>
        </tr>

    
    </tbody>
</table>






<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line704">line 704</a>
    </li></ul></dd>
    

    

    

    
</dl>
















            
                

    

    <h4 class="name" id="serverApp"><span class="type-signature"></span>serverApp<span class="signature">()</span><span class="type-signature"> &rarr; {*}</span></h4>

    



<div class="description">
    Gets the express app (router).
</div>













<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line186">line 186</a>
    </li></ul></dd>
    

    

    

    
</dl>













<h5>Returns:</h5>

        


<dl>
    <dt>
        Type
    </dt>
    <dd>
        
<span class="param-type">*</span>


    </dd>
</dl>

    



            
                

    

    <h4 class="name" id="start"><span class="type-signature"></span>start<span class="signature">(host, port, options, callback<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {<a href="NodeApiServer.html">NodeApiServer</a>}</span></h4>

    



<div class="description">
    Starts the rest server listening for requests against the ip and
port number specified.
</div>









    <h5>Parameters:</h5>
    

<table class="params">
    <thead>
    <tr>
        
        <th>Name</th>
        

        <th>Type</th>

        
        <th>Attributes</th>
        

        

        <th class="last">Description</th>
    </tr>
    </thead>

    <tbody>
    

        <tr>
            
                <td class="name"><code>host</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            
                <td class="attributes">
                

                

                
                </td>
            

            

            <td class="description last">The IP address to listen on, set to 0.0.0.0 to
listen on all interfaces.</td>
        </tr>

    

        <tr>
            
                <td class="name"><code>port</code></td>
            

            <td class="type">
            
                
<span class="param-type">String</span>


            
            </td>

            
                <td class="attributes">
                

                

                
                </td>
            

            

            <td class="description last">The port to listen on.</td>
        </tr>

    

        <tr>
            
                <td class="name"><code>options</code></td>
            

            <td class="type">
            
                
<span class="param-type">Object</span>


            
            </td>

            
                <td class="attributes">
                

                

                
                </td>
            

            

            <td class="description last">An options object.</td>
        </tr>

    

        <tr>
            
                <td class="name"><code>callback</code></td>
            

            <td class="type">
            
                
<span class="param-type">function</span>


            
            </td>

            
                <td class="attributes">
                
                    &lt;optional><br>
                

                

                
                </td>
            

            

            <td class="description last">The method to call when the server has
started (or failed to start).</td>
        </tr>

    
    </tbody>
</table>






<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line89">line 89</a>
    </li></ul></dd>
    

    

    

    
</dl>













<h5>Returns:</h5>

        


<dl>
    <dt>
        Type
    </dt>
    <dd>
        
<span class="param-type"><a href="NodeApiServer.html">NodeApiServer</a></span>


    </dd>
</dl>

    



            
                

    

    <h4 class="name" id="stop"><span class="type-signature"></span>stop<span class="signature">()</span><span class="type-signature"></span></h4>

    



<div class="description">
    Stops the server listener.
</div>













<dl class="details">

    

    

    

    

    

    

    

    

    

    

    

    

    
    <dt class="tag-source">Source:</dt>
    <dd class="tag-source"><ul class="dummy"><li>
        <a href="NodeApiServer.js.html">NodeApiServer.js</a>, <a href="NodeApiServer.js.html#line299">line 299</a>
    </li></ul></dd>
    

    

    

    
</dl>
















            
        

    


    

    
</article>

</section>




</div>

<nav>
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ActiveBucket.html">ActiveBucket</a></li><li><a href="Angular.html">Angular</a></li><li><a href="AutoBind.html">AutoBind</a></li><li><a href="Collection.html">Collection</a></li><li><a href="CollectionGroup.html">CollectionGroup</a></li><li><a href="Condition.html">Condition</a></li><li><a href="Core.html">Core</a></li><li><a href="Db.html">Db</a></li><li><a href="Document.html">Document</a></li><li><a href="Grid.html">Grid</a></li><li><a href="Highchart.html">Highchart</a></li><li><a href="Index2d.html">Index2d</a></li><li><a href="IndexBinaryTree.html">IndexBinaryTree</a></li><li><a href="IndexHashMap.html">IndexHashMap</a></li><li><a href="Infinilist.html">Infinilist</a></li><li><a href="KeyValueStore.html">KeyValueStore</a></li><li><a href="Metrics.html">Metrics</a></li><li><a href="MyModule.html">MyModule</a></li><li><a href="NodeApiClient.html">NodeApiClient</a></li><li><a href="NodeApiServer.html">NodeApiServer</a></li><li><a href="NodeRAS.html">NodeRAS</a></li><li><a href="Odm.html">Odm</a></li><li><a href="OldView.html">OldView</a></li><li><a href="Operation.html">Operation</a></li><li><a href="Overload.html">Overload</a></li><li><a href="Overview.html">Overview</a></li><li><a href="Overview_init.html">init</a></li><li><a href="Path.html">Path</a></li><li><a href="Persist.html">Persist</a></li><li><a href="Procedure.html">Procedure</a></li><li><a href="ReactorIO.html">ReactorIO</a></li><li><a href="Section.html">Section</a></li><li><a href="Serialiser.html">Serialiser</a></li><li><a href="Shared.overload.html">overload</a></li><li><a href="View.html">View</a></li></ul><h3>Mixins</h3><ul><li><a href="ChainReactor.html">ChainReactor</a></li><li><a href="Common.html">Common</a></li><li><a href="Constants.html">Constants</a></li><li><a href="Events.html">Events</a></li><li><a href="Matching.html">Matching</a></li><li><a href="Shared.html">Shared</a></li><li><a href="Sorting.html">Sorting</a></li><li><a href="Tags.html">Tags</a></li><li><a href="Triggers.html">Triggers</a></li><li><a href="Updating.html">Updating</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>

<br class="clear">

<footer>
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Thu Mar 01 2018 11:34:23 GMT+0000 (GMT)
</footer>

<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>